﻿using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Diagnostics.Contracts;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Marin.Entities;

namespace Marin.Repository
{
    public class IngresoRepository : MasterRepository, IIngresoRepository
    {
        public List<Ingreso> GetAllFromIngresos()
        {
            var query = from p in Context.Ingresos
                        
                select p;
            return query.ToList();
        }

        public List<Ingreso> GetAllFromIngresosByCriteiroAndFechas(string criterio = "", DateTime? fechaIni = null, DateTime? fechaFin = null)
        {
            var query = from p in Context.Ingresos
                        
                        select p;
            if (fechaIni.HasValue && fechaFin.HasValue)
            {
                //query = from p in query
                //        where (p.Fecha >= fechaIni.Value && p.Fecha <= fechaFin.Value)
                //        select p;
                query = query.Where(m => m.Fecha >= fechaIni.Value &&
                    m.Fecha <= fechaFin.Value);
            }

            if (!string.IsNullOrEmpty(criterio))
            {
                query = from p in query

                        select p;
            }
            return query.ToList();
        }

        public Ingreso GeTfromIngresoById(int id)
        {
            return Context.Ingresos.Find(id);
        }

        public void AddIngreso(Ingreso ingreso)
        {
            foreach (var item in ingreso.DetalleIngresoes)
            {
                Context.Entry(item.Cuenta).State= EntityState.Unchanged;
                Context.Entry(item).State= EntityState.Added;
            }
            Context.Entry(ingreso).State= EntityState.Unchanged;
            Context.Ingresos.Add(ingreso);
            Context.SaveChanges();
        }

        public void UpdateIngreso(Ingreso ingreso)
        {
            Context.Entry(ingreso).State = EntityState.Unchanged;
            Context.Entry(ingreso).State= EntityState.Modified;

            foreach (var item in ingreso.DetalleIngresoes)
            {
                item.Cuenta = null;
                Context.Entry(item).State = item.Item ==
                                            Int32.Parse("0")
                    ? EntityState.Added
                    : EntityState.Modified;

                item.IdCuenta = item.IdCuenta;
            }
            Context.SaveChanges();
            
        }

        public void RemoveIngres(int id)
        {
            var existe = Context.Ingresos.Find(id);

            if (existe!=null)
            {
                Context.Ingresos.Remove(existe);
                Context.SaveChanges();
            }
        }
    }
}
